package com.scheduledtasklearn;

import java.util.concurrent.*;

public class ScheduledExecutorServiceLearn {
    private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(3);

    public static void main(String[] args) throws InterruptedException {
        System.out.println("程序启动时间: " + System.currentTimeMillis() / 1000);

        // 1. 单次任务（3秒后执行）
        scheduler.schedule(() ->
                        System.out.println("[单次任务] 执行时间: " + System.currentTimeMillis() / 1000),
                3, TimeUnit.SECONDS);

        // 2. 固定延迟任务（初始延迟2秒，周期1秒）
        scheduler.scheduleWithFixedDelay(() -> {
            System.out.println("[固定延迟] 开始: " + System.currentTimeMillis() / 1000);
            try {
                // 模拟任务执行耗时1.5秒
                Thread.sleep(1500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("[固定延迟] 结束: " + System.currentTimeMillis() / 1000);
        }, 2, 1, TimeUnit.SECONDS);

        // 3. 固定速率任务（初始延迟3秒，周期1秒）
        scheduler.scheduleAtFixedRate(() -> {
            System.out.println("[固定速率] 开始: " + System.currentTimeMillis() / 1000);
            try {
                // 模拟任务执行耗时1.5秒
                Thread.sleep(1500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("[固定速率] 结束: " + System.currentTimeMillis() / 1000);
        }, 3, 1, TimeUnit.SECONDS);

        // 运行15秒后关闭
        Thread.sleep(15000);
        scheduler.shutdown();
        System.out.println("程序关闭");
    }
}